package com.lft.juc04.unsafecollection;

import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * java.util.ConcurrentModificationException 并发修改异常
 */
public class UnsafeSet {
	public static void main(String[] args) {
		// 并发下，HashSet 不安全
		/**
		 * 解决方案：
		 * 1. 使用集合工具类的转换成线程安全的集合。Set<String> set = Collections.synchronizedSet(new HashSet<>());
		 * 2. 使用JUC包下的并发集合类。Set<String> set = new CopyOnWriteArraySet();
		 */
		// 不安全的集合
		Set<String> set = new HashSet<>();
		// 安全1（效率低）
		// Set<String> set = Collections.synchronizedSet(new HashSet<>());
		// 安全2
		// Set<String> set = new CopyOnWriteArraySet();
		
		for (int i = 1; i <= 20; i++) {
			new Thread(() -> {
				set.add(UUID.randomUUID().toString().substring(0, 5));
				System.out.println(set);
			}, String.valueOf(i)).start();
		}
	}
}
